package com.qf.p1.util;

import java.lang.reflect.Field;

/**
 * @author xuzhong
 * 用于实体类对象之间数据拷贝（浅拷贝）
 */
public class CopyFieldUtil {
    public static void copy(Object source,Object target){
        Class<?> sourceClass=source.getClass();
        Class<?> targetClass=target.getClass();
        Field [] sourceFields=sourceClass.getDeclaredFields();
        //遍历成员
        for (int i = 0; i < sourceFields.length; i++) {
            //获取第i个成员
            Field field=sourceFields[i];
            //设置可见性
            field.setAccessible(true);
            //拿到成员名
            String name = field.getName();
            //拿到在target对象中与source相同名字的成员
            Field targetField=null;
            try {
                targetField = targetClass.getDeclaredField(name);
            } catch (NoSuchFieldException e) {
                //没找到的成员就跳过
                continue;
            }
            //设置目标对象成员的可见性
            targetField.setAccessible(true);
            //复制属性的值
            try {
                targetField.set(target,field.get(source));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}
